{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "8fe19b15",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy\n",
    "import matplotlib.pyplot as plt\n",
    "from pandas import read_csv\n",
    "import math\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense\n",
    "from keras.layers import LSTM\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from pandas import concat\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d273afaa",
   "metadata": {},
   "outputs": [],
   "source": [
    "from pandas import read_csv\n",
    "from datetime import datetime\n",
    "# load data\n",
    "dataset = read_csv('fei02_min.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "8f931387",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      ����ʱ��  �й�������Сֵ��kw��  ��  ��.1  һ��ڼ���  һ��ڼ���.1  weekday  ����  \\\n",
      "0  2019/10/10           892.5384  10    10      283         41        3     4   \n",
      "1  2019/10/11           978.3816  10    11      284         41        4     4   \n",
      "2  2019/10/12          1020.0588  10    12      285         41        5     4   \n",
      "3  2019/10/13           965.6964  10    13      286         41        6     4   \n",
      "4  2019/10/14           943.8792  10    14      287         42        0     4   \n",
      "\n",
      "   �Ƿ��³�  �Ƿ���ĩ  �Ƿ񼾽ڳ�  �Ƿ񼾽�ĩ  �Ƿ���ĩ.1  ����״��  ����¶�  ����¶�.1  \\\n",
      "0       0       0      0      0         0      2.0    32.0      25.0   \n",
      "1       0       0      0      0         0      1.0    33.0      25.0   \n",
      "2       0       0      0      0         1      2.0    33.0      24.0   \n",
      "3       0       0      0      0         1      9.0    31.0      23.0   \n",
      "4       0       0      0      0         0      2.0    29.0      23.0   \n",
      "\n",
      "   �����������  ҹ����������  \n",
      "0         11.0          8.0  \n",
      "1         11.0          8.0  \n",
      "2         11.0          8.0  \n",
      "3         11.0          8.0  \n",
      "4         11.0          8.0  \n"
     ]
    }
   ],
   "source": [
    "print(dataset.head(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "2543c3f1",
   "metadata": {},
   "outputs": [],
   "source": [
    "# manually specify column names\n",
    "#dataset.drop('Unnamed: 0 ', axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "82c5bfba",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      ����ʱ��  �й�������Сֵ��kw��  ��  ��.1  һ��ڼ���  һ��ڼ���.1  weekday  ����  \\\n",
      "0  2019/10/10           892.5384  10    10      283         41        3     4   \n",
      "1  2019/10/11           978.3816  10    11      284         41        4     4   \n",
      "2  2019/10/12          1020.0588  10    12      285         41        5     4   \n",
      "3  2019/10/13           965.6964  10    13      286         41        6     4   \n",
      "4  2019/10/14           943.8792  10    14      287         42        0     4   \n",
      "\n",
      "   �Ƿ��³�  �Ƿ���ĩ  �Ƿ񼾽ڳ�  �Ƿ񼾽�ĩ  �Ƿ���ĩ.1  ����״��  ����¶�  ����¶�.1  \\\n",
      "0       0       0      0      0         0      2.0    32.0      25.0   \n",
      "1       0       0      0      0         0      1.0    33.0      25.0   \n",
      "2       0       0      0      0         1      2.0    33.0      24.0   \n",
      "3       0       0      0      0         1      9.0    31.0      23.0   \n",
      "4       0       0      0      0         0      2.0    29.0      23.0   \n",
      "\n",
      "   �����������  ҹ����������  \n",
      "0         11.0          8.0  \n",
      "1         11.0          8.0  \n",
      "2         11.0          8.0  \n",
      "3         11.0          8.0  \n",
      "4         11.0          8.0  \n"
     ]
    }
   ],
   "source": [
    "print(dataset.head(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b9af4d79",
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset.columns = ['数据时间','有功功率最大值（kw）','月','天','一年第几天','一年第几周','weekday','季节','是否月初','是否月末','是否季节初','是否季节末','是否周末','天气状况','最高温度','最低温度','白天风力风向','夜晚风力风向']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "7424ebc2",
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset.drop('数据时间', axis=1, inplace=True)\n",
    "# summarize first 5 rows\n",
    "#print(dataset.head(5))\n",
    "# save to file\n",
    "dataset.to_csv('power.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "3a01e663",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     有功功率最大值（kw）   月   天  一年第几天  一年第几周  weekday  季节  是否月初  是否月末  是否季节初  是否季节末  \\\n",
      "0       892.5384  10  10    283     41        3   4     0     0      0      0   \n",
      "1       978.3816  10  11    284     41        4   4     0     0      0      0   \n",
      "2      1020.0588  10  12    285     41        5   4     0     0      0      0   \n",
      "3       965.6964  10  13    286     41        6   4     0     0      0      0   \n",
      "4       943.8792  10  14    287     42        0   4     0     0      0      0   \n",
      "..           ...  ..  ..    ...    ...      ...  ..   ...   ...    ...    ...   \n",
      "778          NaN  11  26    330     47        4   4     0     0      0      0   \n",
      "779          NaN  11  27    331     47        5   4     0     0      0      0   \n",
      "780          NaN  11  28    332     47        6   4     0     0      0      0   \n",
      "781          NaN  11  29    333     48        0   4     0     0      0      0   \n",
      "782          NaN  11  30    334     48        1   4     0     1      0      0   \n",
      "\n",
      "     是否周末  天气状况   最高温度   最低温度  白天风力风向  夜晚风力风向  \n",
      "0       0  2.00  32.00  25.00   11.00    8.00  \n",
      "1       0  1.00  33.00  25.00   11.00    8.00  \n",
      "2       1  2.00  33.00  24.00   11.00    8.00  \n",
      "3       1  9.00  31.00  23.00   11.00    8.00  \n",
      "4       0  2.00  29.00  23.00   11.00    8.00  \n",
      "..    ...   ...    ...    ...     ...     ...  \n",
      "778     0  2.00  25.80  16.35   15.20   12.20  \n",
      "779     1  2.00  23.65  15.30   19.40   16.40  \n",
      "780     1  1.15  21.40  13.50   21.15   18.15  \n",
      "781     0  1.85  22.05  13.65   15.20   12.20  \n",
      "782     0  1.15  22.50  14.20   20.40   17.40  \n",
      "\n",
      "[783 rows x 17 columns]\n"
     ]
    }
   ],
   "source": [
    "print(dataset)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "4c4e13a4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<bound method NDFrame.head of      var1(t-1)  var2(t-1)  var3(t-1)  var4(t-1)  var5(t-1)  var6(t-1)  \\\n",
      "1     0.473901   0.818182   0.300000   0.772603   0.769231   0.500000   \n",
      "2     0.518928   0.818182   0.333333   0.775342   0.769231   0.666667   \n",
      "3     0.540788   0.818182   0.366667   0.778082   0.769231   0.833333   \n",
      "4     0.512274   0.818182   0.400000   0.780822   0.769231   1.000000   \n",
      "5     0.500830   0.818182   0.433333   0.783562   0.788462   0.000000   \n",
      "..         ...        ...        ...        ...        ...        ...   \n",
      "687   0.756629   0.636364   0.833333   0.649315   0.634615   0.500000   \n",
      "688   0.748958   0.636364   0.866667   0.652055   0.634615   0.666667   \n",
      "689   0.683209   0.636364   0.900000   0.654795   0.634615   0.833333   \n",
      "690   0.750715   0.636364   0.933333   0.657534   0.634615   1.000000   \n",
      "691   0.758420   0.636364   0.966667   0.660274   0.653846   0.000000   \n",
      "\n",
      "     var7(t-1)  var8(t-1)  var9(t-1)  var10(t-1)  var11(t-1)  var12(t-1)  \\\n",
      "1     1.000000        0.0        0.0         0.0         0.0         0.0   \n",
      "2     1.000000        0.0        0.0         0.0         0.0         0.0   \n",
      "3     1.000000        0.0        0.0         0.0         0.0         1.0   \n",
      "4     1.000000        0.0        0.0         0.0         0.0         1.0   \n",
      "5     1.000000        0.0        0.0         0.0         0.0         0.0   \n",
      "..         ...        ...        ...         ...         ...         ...   \n",
      "687   0.666667        0.0        0.0         0.0         0.0         0.0   \n",
      "688   0.666667        0.0        0.0         0.0         0.0         0.0   \n",
      "689   0.666667        0.0        0.0         0.0         0.0         1.0   \n",
      "690   0.666667        0.0        0.0         0.0         0.0         1.0   \n",
      "691   0.666667        0.0        0.0         0.0         0.0         0.0   \n",
      "\n",
      "     var13(t-1)  var14(t-1)  var15(t-1)  var16(t-1)  var17(t-1)   var1(t)  \n",
      "1         0.125    0.785714    0.846154       0.000       0.000  0.518928  \n",
      "2         0.000    0.821429    0.846154       0.000       0.000  0.540788  \n",
      "3         0.125    0.821429    0.807692       0.000       0.000  0.512274  \n",
      "4         1.000    0.750000    0.769231       0.000       0.000  0.500830  \n",
      "5         0.125    0.678572    0.769231       0.000       0.000  0.514291  \n",
      "..          ...         ...         ...         ...         ...       ...  \n",
      "687       1.000    0.892857    0.923077       0.875       0.875  0.748958  \n",
      "688       1.000    0.892857    0.884615       0.875       0.875  0.683209  \n",
      "689       0.125    0.821429    0.884615       0.875       0.875  0.750715  \n",
      "690       1.000    0.785714    0.846154       0.875       0.875  0.758420  \n",
      "691       1.000    0.857143    0.884615       0.875       0.875  0.741117  \n",
      "\n",
      "[691 rows x 18 columns]>\n"
     ]
    }
   ],
   "source": [
    "# prepare data for lstm\n",
    "from pandas import DataFrame\n",
    "from pandas import concat\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "\n",
    "# convert series to supervised learning\n",
    "def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):\n",
    "    n_vars = 1 if type(data) is list else data.shape[1]\n",
    "    df = DataFrame(data)\n",
    "    cols, names = list(), list()\n",
    "    # input sequence (t-n, ... t-1)\n",
    "    for i in range(n_in, 0, -1):\n",
    "        cols.append(df.shift(i))\n",
    "        names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]\n",
    "    # forecast sequence (t, t+1, ... t+n)\n",
    "    for i in range(0, n_out):\n",
    "        cols.append(df.shift(-i))\n",
    "        if i == 0:\n",
    "            names += [('var%d(t)' % (j+1)) for j in range(n_vars)]\n",
    "        else:\n",
    "            names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]\n",
    "    # put it all together\n",
    "    agg = concat(cols, axis=1)\n",
    "    agg.columns = names\n",
    "    # drop rows with NaN values\n",
    "    if dropnan:\n",
    "        agg.dropna(inplace=True)\n",
    "    return agg\n",
    "\n",
    "# load dataset\n",
    "dataset = read_csv('power.csv', header=0, index_col=0)\n",
    "values = dataset.values\n",
    "# integer encode direction\n",
    "encoder = LabelEncoder()\n",
    "values[:,4] = encoder.fit_transform(values[:,4])\n",
    "# ensure all data is float\n",
    "values = values.astype('float32')\n",
    "# normalize features\n",
    "scaler = MinMaxScaler(feature_range=(0, 1))\n",
    "scaled = scaler.fit_transform(values)\n",
    "# frame as supervised learning\n",
    "reframed = series_to_supervised(scaled, 1, 1)\n",
    "# drop columns we don't want to predict\n",
    "reframed.drop(reframed.columns[[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33]], axis=1, inplace=True)\n",
    "#print(reframed.head())\n",
    "print(reframed.head)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "31d34811",
   "metadata": {},
   "outputs": [],
   "source": [
    "#plt.plot(reframed)\n",
    "#plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "b8a051ee",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(600, 1, 17) (600,) (91, 1, 17) (91,)\n"
     ]
    }
   ],
   "source": [
    "...\n",
    "# split into train and test sets\n",
    "values = reframed.values\n",
    "n_train_hours = int(len(reframed)-91)\n",
    "train = values[:n_train_hours, :]\n",
    "test = values[n_train_hours:, :]\n",
    "# split into input and outputs\n",
    "train_X, train_y = train[:, :-1], train[:, -1]\n",
    "test_X, test_y = test[:, :-1], test[:, -1]\n",
    "# reshape input to be 3D [samples, timesteps, features]\n",
    "train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1]))\n",
    "test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1]))\n",
    "print(train_X.shape, train_y.shape, test_X.shape, test_y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "f1dfb13d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "9/9 - 1s - loss: 0.4825 - val_loss: 0.5038 - 1s/epoch - 137ms/step\n",
      "Epoch 2/100\n",
      "9/9 - 0s - loss: 0.3478 - val_loss: 0.3204 - 27ms/epoch - 3ms/step\n",
      "Epoch 3/100\n",
      "9/9 - 0s - loss: 0.2238 - val_loss: 0.1561 - 29ms/epoch - 3ms/step\n",
      "Epoch 4/100\n",
      "9/9 - 0s - loss: 0.1723 - val_loss: 0.0978 - 26ms/epoch - 3ms/step\n",
      "Epoch 5/100\n",
      "9/9 - 0s - loss: 0.1714 - val_loss: 0.0964 - 25ms/epoch - 3ms/step\n",
      "Epoch 6/100\n",
      "9/9 - 0s - loss: 0.1650 - val_loss: 0.0927 - 25ms/epoch - 3ms/step\n",
      "Epoch 7/100\n",
      "9/9 - 0s - loss: 0.1561 - val_loss: 0.0952 - 24ms/epoch - 3ms/step\n",
      "Epoch 8/100\n",
      "9/9 - 0s - loss: 0.1496 - val_loss: 0.0934 - 24ms/epoch - 3ms/step\n",
      "Epoch 9/100\n",
      "9/9 - 0s - loss: 0.1435 - val_loss: 0.0899 - 24ms/epoch - 3ms/step\n",
      "Epoch 10/100\n",
      "9/9 - 0s - loss: 0.1382 - val_loss: 0.0885 - 24ms/epoch - 3ms/step\n",
      "Epoch 11/100\n",
      "9/9 - 0s - loss: 0.1336 - val_loss: 0.0883 - 24ms/epoch - 3ms/step\n",
      "Epoch 12/100\n",
      "9/9 - 0s - loss: 0.1294 - val_loss: 0.0883 - 24ms/epoch - 3ms/step\n",
      "Epoch 13/100\n",
      "9/9 - 0s - loss: 0.1257 - val_loss: 0.0888 - 23ms/epoch - 3ms/step\n",
      "Epoch 14/100\n",
      "9/9 - 0s - loss: 0.1224 - val_loss: 0.0897 - 24ms/epoch - 3ms/step\n",
      "Epoch 15/100\n",
      "9/9 - 0s - loss: 0.1198 - val_loss: 0.0902 - 24ms/epoch - 3ms/step\n",
      "Epoch 16/100\n",
      "9/9 - 0s - loss: 0.1175 - val_loss: 0.0910 - 23ms/epoch - 3ms/step\n",
      "Epoch 17/100\n",
      "9/9 - 0s - loss: 0.1153 - val_loss: 0.0913 - 24ms/epoch - 3ms/step\n",
      "Epoch 18/100\n",
      "9/9 - 0s - loss: 0.1137 - val_loss: 0.0915 - 23ms/epoch - 3ms/step\n",
      "Epoch 19/100\n",
      "9/9 - 0s - loss: 0.1118 - val_loss: 0.0915 - 23ms/epoch - 3ms/step\n",
      "Epoch 20/100\n",
      "9/9 - 0s - loss: 0.1106 - val_loss: 0.0909 - 23ms/epoch - 3ms/step\n",
      "Epoch 21/100\n",
      "9/9 - 0s - loss: 0.1094 - val_loss: 0.0904 - 23ms/epoch - 3ms/step\n",
      "Epoch 22/100\n",
      "9/9 - 0s - loss: 0.1077 - val_loss: 0.0903 - 24ms/epoch - 3ms/step\n",
      "Epoch 23/100\n",
      "9/9 - 0s - loss: 0.1066 - val_loss: 0.0898 - 23ms/epoch - 3ms/step\n",
      "Epoch 24/100\n",
      "9/9 - 0s - loss: 0.1054 - val_loss: 0.0893 - 24ms/epoch - 3ms/step\n",
      "Epoch 25/100\n",
      "9/9 - 0s - loss: 0.1039 - val_loss: 0.0889 - 23ms/epoch - 3ms/step\n",
      "Epoch 26/100\n",
      "9/9 - 0s - loss: 0.1029 - val_loss: 0.0883 - 23ms/epoch - 3ms/step\n",
      "Epoch 27/100\n",
      "9/9 - 0s - loss: 0.1015 - val_loss: 0.0879 - 25ms/epoch - 3ms/step\n",
      "Epoch 28/100\n",
      "9/9 - 0s - loss: 0.1007 - val_loss: 0.0872 - 24ms/epoch - 3ms/step\n",
      "Epoch 29/100\n",
      "9/9 - 0s - loss: 0.0997 - val_loss: 0.0868 - 25ms/epoch - 3ms/step\n",
      "Epoch 30/100\n",
      "9/9 - 0s - loss: 0.0984 - val_loss: 0.0861 - 25ms/epoch - 3ms/step\n",
      "Epoch 31/100\n",
      "9/9 - 0s - loss: 0.0975 - val_loss: 0.0852 - 25ms/epoch - 3ms/step\n",
      "Epoch 32/100\n",
      "9/9 - 0s - loss: 0.0967 - val_loss: 0.0854 - 25ms/epoch - 3ms/step\n",
      "Epoch 33/100\n",
      "9/9 - 0s - loss: 0.0955 - val_loss: 0.0842 - 25ms/epoch - 3ms/step\n",
      "Epoch 34/100\n",
      "9/9 - 0s - loss: 0.0951 - val_loss: 0.0846 - 25ms/epoch - 3ms/step\n",
      "Epoch 35/100\n",
      "9/9 - 0s - loss: 0.0935 - val_loss: 0.0842 - 25ms/epoch - 3ms/step\n",
      "Epoch 36/100\n",
      "9/9 - 0s - loss: 0.0931 - val_loss: 0.0835 - 24ms/epoch - 3ms/step\n",
      "Epoch 37/100\n",
      "9/9 - 0s - loss: 0.0919 - val_loss: 0.0835 - 25ms/epoch - 3ms/step\n",
      "Epoch 38/100\n",
      "9/9 - 0s - loss: 0.0916 - val_loss: 0.0825 - 24ms/epoch - 3ms/step\n",
      "Epoch 39/100\n",
      "9/9 - 0s - loss: 0.0907 - val_loss: 0.0829 - 25ms/epoch - 3ms/step\n",
      "Epoch 40/100\n",
      "9/9 - 0s - loss: 0.0897 - val_loss: 0.0827 - 24ms/epoch - 3ms/step\n",
      "Epoch 41/100\n",
      "9/9 - 0s - loss: 0.0893 - val_loss: 0.0826 - 24ms/epoch - 3ms/step\n",
      "Epoch 42/100\n",
      "9/9 - 0s - loss: 0.0883 - val_loss: 0.0824 - 25ms/epoch - 3ms/step\n",
      "Epoch 43/100\n",
      "9/9 - 0s - loss: 0.0878 - val_loss: 0.0823 - 24ms/epoch - 3ms/step\n",
      "Epoch 44/100\n",
      "9/9 - 0s - loss: 0.0870 - val_loss: 0.0822 - 24ms/epoch - 3ms/step\n",
      "Epoch 45/100\n",
      "9/9 - 0s - loss: 0.0862 - val_loss: 0.0818 - 26ms/epoch - 3ms/step\n",
      "Epoch 46/100\n",
      "9/9 - 0s - loss: 0.0858 - val_loss: 0.0818 - 25ms/epoch - 3ms/step\n",
      "Epoch 47/100\n",
      "9/9 - 0s - loss: 0.0849 - val_loss: 0.0815 - 24ms/epoch - 3ms/step\n",
      "Epoch 48/100\n",
      "9/9 - 0s - loss: 0.0845 - val_loss: 0.0811 - 25ms/epoch - 3ms/step\n",
      "Epoch 49/100\n",
      "9/9 - 0s - loss: 0.0837 - val_loss: 0.0807 - 24ms/epoch - 3ms/step\n",
      "Epoch 50/100\n",
      "9/9 - 0s - loss: 0.0833 - val_loss: 0.0803 - 23ms/epoch - 3ms/step\n",
      "Epoch 51/100\n",
      "9/9 - 0s - loss: 0.0826 - val_loss: 0.0805 - 24ms/epoch - 3ms/step\n",
      "Epoch 52/100\n",
      "9/9 - 0s - loss: 0.0822 - val_loss: 0.0793 - 24ms/epoch - 3ms/step\n",
      "Epoch 53/100\n",
      "9/9 - 0s - loss: 0.0816 - val_loss: 0.0788 - 24ms/epoch - 3ms/step\n",
      "Epoch 54/100\n",
      "9/9 - 0s - loss: 0.0809 - val_loss: 0.0791 - 24ms/epoch - 3ms/step\n",
      "Epoch 55/100\n",
      "9/9 - 0s - loss: 0.0805 - val_loss: 0.0785 - 24ms/epoch - 3ms/step\n",
      "Epoch 56/100\n",
      "9/9 - 0s - loss: 0.0799 - val_loss: 0.0785 - 23ms/epoch - 3ms/step\n",
      "Epoch 57/100\n",
      "9/9 - 0s - loss: 0.0796 - val_loss: 0.0788 - 23ms/epoch - 3ms/step\n",
      "Epoch 58/100\n",
      "9/9 - 0s - loss: 0.0788 - val_loss: 0.0777 - 23ms/epoch - 3ms/step\n",
      "Epoch 59/100\n",
      "9/9 - 0s - loss: 0.0786 - val_loss: 0.0784 - 23ms/epoch - 3ms/step\n",
      "Epoch 60/100\n",
      "9/9 - 0s - loss: 0.0778 - val_loss: 0.0771 - 23ms/epoch - 3ms/step\n",
      "Epoch 61/100\n",
      "9/9 - 0s - loss: 0.0777 - val_loss: 0.0783 - 23ms/epoch - 3ms/step\n",
      "Epoch 62/100\n",
      "9/9 - 0s - loss: 0.0768 - val_loss: 0.0774 - 24ms/epoch - 3ms/step\n",
      "Epoch 63/100\n",
      "9/9 - 0s - loss: 0.0766 - val_loss: 0.0774 - 23ms/epoch - 3ms/step\n",
      "Epoch 64/100\n",
      "9/9 - 0s - loss: 0.0759 - val_loss: 0.0775 - 24ms/epoch - 3ms/step\n",
      "Epoch 65/100\n",
      "9/9 - 0s - loss: 0.0758 - val_loss: 0.0779 - 24ms/epoch - 3ms/step\n",
      "Epoch 66/100\n",
      "9/9 - 0s - loss: 0.0749 - val_loss: 0.0780 - 24ms/epoch - 3ms/step\n",
      "Epoch 67/100\n",
      "9/9 - 0s - loss: 0.0750 - val_loss: 0.0778 - 24ms/epoch - 3ms/step\n",
      "Epoch 68/100\n",
      "9/9 - 0s - loss: 0.0741 - val_loss: 0.0782 - 24ms/epoch - 3ms/step\n",
      "Epoch 69/100\n",
      "9/9 - 0s - loss: 0.0738 - val_loss: 0.0777 - 24ms/epoch - 3ms/step\n",
      "Epoch 70/100\n",
      "9/9 - 0s - loss: 0.0734 - val_loss: 0.0780 - 23ms/epoch - 3ms/step\n",
      "Epoch 71/100\n",
      "9/9 - 0s - loss: 0.0730 - val_loss: 0.0775 - 23ms/epoch - 3ms/step\n",
      "Epoch 72/100\n",
      "9/9 - 0s - loss: 0.0727 - val_loss: 0.0777 - 24ms/epoch - 3ms/step\n",
      "Epoch 73/100\n",
      "9/9 - 0s - loss: 0.0722 - val_loss: 0.0774 - 25ms/epoch - 3ms/step\n",
      "Epoch 74/100\n",
      "9/9 - 0s - loss: 0.0720 - val_loss: 0.0774 - 25ms/epoch - 3ms/step\n",
      "Epoch 75/100\n",
      "9/9 - 0s - loss: 0.0715 - val_loss: 0.0764 - 23ms/epoch - 3ms/step\n",
      "Epoch 76/100\n",
      "9/9 - 0s - loss: 0.0714 - val_loss: 0.0776 - 25ms/epoch - 3ms/step\n",
      "Epoch 77/100\n",
      "9/9 - 0s - loss: 0.0708 - val_loss: 0.0764 - 24ms/epoch - 3ms/step\n",
      "Epoch 78/100\n",
      "9/9 - 0s - loss: 0.0709 - val_loss: 0.0772 - 25ms/epoch - 3ms/step\n",
      "Epoch 79/100\n",
      "9/9 - 0s - loss: 0.0702 - val_loss: 0.0770 - 23ms/epoch - 3ms/step\n",
      "Epoch 80/100\n",
      "9/9 - 0s - loss: 0.0700 - val_loss: 0.0763 - 26ms/epoch - 3ms/step\n",
      "Epoch 81/100\n",
      "9/9 - 0s - loss: 0.0696 - val_loss: 0.0767 - 24ms/epoch - 3ms/step\n",
      "Epoch 82/100\n",
      "9/9 - 0s - loss: 0.0694 - val_loss: 0.0764 - 23ms/epoch - 3ms/step\n",
      "Epoch 83/100\n",
      "9/9 - 0s - loss: 0.0692 - val_loss: 0.0765 - 24ms/epoch - 3ms/step\n",
      "Epoch 84/100\n",
      "9/9 - 0s - loss: 0.0688 - val_loss: 0.0761 - 22ms/epoch - 2ms/step\n",
      "Epoch 85/100\n",
      "9/9 - 0s - loss: 0.0688 - val_loss: 0.0772 - 24ms/epoch - 3ms/step\n",
      "Epoch 86/100\n",
      "9/9 - 0s - loss: 0.0684 - val_loss: 0.0768 - 24ms/epoch - 3ms/step\n",
      "Epoch 87/100\n",
      "9/9 - 0s - loss: 0.0684 - val_loss: 0.0769 - 25ms/epoch - 3ms/step\n",
      "Epoch 88/100\n",
      "9/9 - 0s - loss: 0.0679 - val_loss: 0.0765 - 27ms/epoch - 3ms/step\n",
      "Epoch 89/100\n",
      "9/9 - 0s - loss: 0.0679 - val_loss: 0.0767 - 25ms/epoch - 3ms/step\n",
      "Epoch 90/100\n",
      "9/9 - 0s - loss: 0.0676 - val_loss: 0.0768 - 24ms/epoch - 3ms/step\n",
      "Epoch 91/100\n",
      "9/9 - 0s - loss: 0.0673 - val_loss: 0.0766 - 24ms/epoch - 3ms/step\n",
      "Epoch 92/100\n",
      "9/9 - 0s - loss: 0.0673 - val_loss: 0.0768 - 24ms/epoch - 3ms/step\n",
      "Epoch 93/100\n",
      "9/9 - 0s - loss: 0.0669 - val_loss: 0.0761 - 24ms/epoch - 3ms/step\n",
      "Epoch 94/100\n",
      "9/9 - 0s - loss: 0.0669 - val_loss: 0.0772 - 26ms/epoch - 3ms/step\n",
      "Epoch 95/100\n",
      "9/9 - 0s - loss: 0.0665 - val_loss: 0.0757 - 26ms/epoch - 3ms/step\n",
      "Epoch 96/100\n",
      "9/9 - 0s - loss: 0.0665 - val_loss: 0.0772 - 27ms/epoch - 3ms/step\n",
      "Epoch 97/100\n",
      "9/9 - 0s - loss: 0.0663 - val_loss: 0.0760 - 27ms/epoch - 3ms/step\n",
      "Epoch 98/100\n",
      "9/9 - 0s - loss: 0.0662 - val_loss: 0.0773 - 28ms/epoch - 3ms/step\n",
      "Epoch 99/100\n",
      "9/9 - 0s - loss: 0.0658 - val_loss: 0.0753 - 26ms/epoch - 3ms/step\n",
      "Epoch 100/100\n",
      "9/9 - 0s - loss: 0.0662 - val_loss: 0.0767 - 26ms/epoch - 3ms/step\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "...\n",
    "# design network\n",
    "model = Sequential()\n",
    "model.add(LSTM(50, input_shape=(train_X.shape[1], train_X.shape[2])))\n",
    "model.add(Dense(1))\n",
    "model.compile(loss='mae', optimizer='adam')\n",
    "# fit network\n",
    "history = model.fit(train_X, train_y, epochs=100, batch_size=72, validation_data=(test_X, test_y), verbose=2, shuffle=False)\n",
    "# plot history\n",
    "plt.plot(history.history['loss'], label='train')\n",
    "plt.plot(history.history['val_loss'], label='test')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "64a0d2b0",
   "metadata": {},
   "outputs": [],
   "source": [
    "# make predictions\n",
    "#trainPredict = model.predict(train_X)\n",
    "#testPredict = model.predict(test_X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "7c7a3607",
   "metadata": {},
   "outputs": [],
   "source": [
    "...\n",
    "# make a prediction\n",
    "yhat = model.predict(test_X)\n",
    "test_X = test_X.reshape((test_X.shape[0], test_X.shape[2]))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "2e095d4f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(91, 1) (91, 17)\n"
     ]
    }
   ],
   "source": [
    "yhat=DataFrame(yhat)\n",
    "test_X=DataFrame(test_X)\n",
    "print(yhat.shape,test_X.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "f5b552e4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>13</th>\n",
       "      <th>14</th>\n",
       "      <th>15</th>\n",
       "      <th>16</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.755170</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.413699</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.166667</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.625</td>\n",
       "      <td>0.785714</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.725051</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.033333</td>\n",
       "      <td>0.416438</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.750</td>\n",
       "      <td>0.750000</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.598316</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.066667</td>\n",
       "      <td>0.419178</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.625</td>\n",
       "      <td>0.892857</td>\n",
       "      <td>0.807692</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.688117</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.100000</td>\n",
       "      <td>0.421918</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.500</td>\n",
       "      <td>0.642857</td>\n",
       "      <td>0.769231</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.681146</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.133333</td>\n",
       "      <td>0.424658</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.125</td>\n",
       "      <td>0.785714</td>\n",
       "      <td>0.807692</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>86</th>\n",
       "      <td>0.793237</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.649315</td>\n",
       "      <td>0.634615</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.892857</td>\n",
       "      <td>0.923077</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>87</th>\n",
       "      <td>0.777324</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.866667</td>\n",
       "      <td>0.652055</td>\n",
       "      <td>0.634615</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.892857</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>88</th>\n",
       "      <td>0.727678</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>0.654795</td>\n",
       "      <td>0.634615</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.125</td>\n",
       "      <td>0.821429</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>89</th>\n",
       "      <td>0.757124</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.933333</td>\n",
       "      <td>0.657534</td>\n",
       "      <td>0.634615</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.785714</td>\n",
       "      <td>0.846154</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90</th>\n",
       "      <td>0.789405</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.966667</td>\n",
       "      <td>0.660274</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.857143</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>91 rows × 17 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3         4         5         6    7   \\\n",
       "0   0.755170  0.454545  0.000000  0.413699  0.403846  0.166667  0.333333  1.0   \n",
       "1   0.725051  0.454545  0.033333  0.416438  0.403846  0.333333  0.333333  0.0   \n",
       "2   0.598316  0.454545  0.066667  0.419178  0.403846  0.500000  0.333333  0.0   \n",
       "3   0.688117  0.454545  0.100000  0.421918  0.403846  0.666667  0.333333  0.0   \n",
       "4   0.681146  0.454545  0.133333  0.424658  0.403846  0.833333  0.333333  0.0   \n",
       "..       ...       ...       ...       ...       ...       ...       ...  ...   \n",
       "86  0.793237  0.636364  0.833333  0.649315  0.634615  0.500000  0.666667  0.0   \n",
       "87  0.777324  0.636364  0.866667  0.652055  0.634615  0.666667  0.666667  0.0   \n",
       "88  0.727678  0.636364  0.900000  0.654795  0.634615  0.833333  0.666667  0.0   \n",
       "89  0.757124  0.636364  0.933333  0.657534  0.634615  1.000000  0.666667  0.0   \n",
       "90  0.789405  0.636364  0.966667  0.660274  0.653846  0.000000  0.666667  0.0   \n",
       "\n",
       "     8    9    10   11     12        13        14     15     16  \n",
       "0   0.0  0.0  0.0  0.0  0.625  0.785714  0.884615  0.875  0.875  \n",
       "1   0.0  0.0  0.0  0.0  0.750  0.750000  0.884615  0.875  0.875  \n",
       "2   0.0  0.0  0.0  0.0  0.625  0.892857  0.807692  0.875  0.875  \n",
       "3   0.0  0.0  0.0  0.0  0.500  0.642857  0.769231  0.875  0.875  \n",
       "4   0.0  0.0  0.0  1.0  0.125  0.785714  0.807692  0.875  0.875  \n",
       "..  ...  ...  ...  ...    ...       ...       ...    ...    ...  \n",
       "86  0.0  0.0  0.0  0.0  1.000  0.892857  0.923077  0.875  0.875  \n",
       "87  0.0  0.0  0.0  0.0  1.000  0.892857  0.884615  0.875  0.875  \n",
       "88  0.0  0.0  0.0  1.0  0.125  0.821429  0.884615  0.875  0.875  \n",
       "89  0.0  0.0  0.0  1.0  1.000  0.785714  0.846154  0.875  0.875  \n",
       "90  0.0  0.0  0.0  0.0  1.000  0.857143  0.884615  0.875  0.875  \n",
       "\n",
       "[91 rows x 17 columns]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_X[0]=yhat\n",
    "test_X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "02cb65cc",
   "metadata": {},
   "outputs": [],
   "source": [
    "inv_yhat = scaler.inverse_transform(test_X)\n",
    "inv_yhat = inv_yhat[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "887968dc",
   "metadata": {},
   "outputs": [],
   "source": [
    "# invert scaling for actual\n",
    "test_y = test_y.reshape((len(test_y), 1))\n",
    "test_X[0]=test_y\n",
    "inv_y = scaler.inverse_transform(test_X)\n",
    "inv_y = inv_y[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "64783e5b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test Score: 202.797\n"
     ]
    }
   ],
   "source": [
    "# calculate RMSE\n",
    "from math import sqrt\n",
    "#trainScore = sqrt(mean_squared_error(train_y[0], inv_yhat[0]))\n",
    "#print('Train Score: %.3f RMSE' % (trainScore))\n",
    "rmse2 = sqrt(mean_squared_error(inv_y, inv_yhat))\n",
    "print('Test Score: %.3f' % rmse2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "1c22321c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1293.2976,  841.7814, 1286.4702, 1184.1012, 1216.8427, 1355.6454,\n",
       "       1444.7316, 1513.7418, 1559.823 , 1071.0084, 1019.4798, 1433.1084,\n",
       "       1394.4642, 1443.2676, 1500.7812, 1594.2252, 1521.8712, 1040.1696,\n",
       "       1521.5004, 1427.181 , 1373.448 , 1303.5066, 1282.029 ,  922.1736,\n",
       "       1289.3568, 1217.2548, 1076.1   , 1493.5367, 1532.2632, 1571.9358,\n",
       "       1557.537 , 1100.6844, 1447.9386, 1552.4106, 1463.6604, 1558.6385,\n",
       "       1400.0742, 1110.2556, 1411.9092, 1547.4792, 1580.499 , 1501.5396,\n",
       "       1429.5828, 1511.5464, 1077.3912,  901.4544, 1326.2322, 1439.0916,\n",
       "       1354.2444, 1408.9296, 1454.0417, 1120.1688, 1480.6656, 1454.5404,\n",
       "       1468.9073, 1455.2021, 1478.418 ,  978.858 , 1460.7936,  869.751 ,\n",
       "       1429.0116, 1265.0892, 1371.3354, 1400.9634, 1362.849 , 1424.0394,\n",
       "       1394.8116, 1354.5588, 1067.7954, 1389.7607, 1391.8596, 1405.3104,\n",
       "       1406.8302, 1499.4042, 1283.7432, 1388.7942, 1421.9897, 1319.9838,\n",
       "       1290.7422,  986.3231,  864.5856, 1330.9254, 1355.2584, 1379.538 ,\n",
       "       1423.626 , 1431.555 , 1416.9294, 1291.5815, 1420.2804, 1434.9684,\n",
       "       1401.9822], dtype=float32)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inv_y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "227db62c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "91 91\n"
     ]
    }
   ],
   "source": [
    "print(len(inv_y),len(inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "a388d8c6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1428.7738, 1371.3513, 1129.7338, 1300.9382, 1287.647 , 1297.7544,\n",
       "       1377.5638, 1449.877 , 1480.601 , 1528.015 , 1248.5015, 1201.8102,\n",
       "       1492.0814, 1404.6782, 1472.7555, 1498.5035, 1542.6758, 1489.3293,\n",
       "       1275.1592, 1513.9382, 1448.5059, 1389.0623, 1348.1472, 1305.1523,\n",
       "       1169.907 , 1343.4972, 1307.0894, 1261.2163, 1478.7821, 1580.7223,\n",
       "       1592.7877, 1544.6952, 1310.482 , 1491.2262, 1565.3993, 1486.0812,\n",
       "       1543.0972, 1456.8909, 1325.374 , 1491.569 , 1540.5906, 1571.5797,\n",
       "       1541.8953, 1499.2891, 1527.9515, 1297.479 , 1203.6559, 1400.9181,\n",
       "       1457.0273, 1389.2251, 1409.1544, 1474.6813, 1302.7603, 1492.5933,\n",
       "       1484.6956, 1509.679 , 1512.9893, 1530.9238, 1221.5411, 1458.4781,\n",
       "       1159.6847, 1422.1509, 1413.1573, 1465.5549, 1464.7421, 1449.8085,\n",
       "       1474.3889, 1472.3257, 1459.0482, 1316.2908, 1453.4902, 1467.8163,\n",
       "       1454.5494, 1470.7854, 1522.7642, 1379.4347, 1447.4802, 1497.7162,\n",
       "       1452.1083, 1380.2007, 1238.7798, 1188.463 , 1433.2383, 1472.5718,\n",
       "       1480.3142, 1465.5107, 1501.3475, 1471.0084, 1376.36  , 1432.4979,\n",
       "       1494.041 ], dtype=float32)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inv_yhat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "3314d790",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MAPE: 0.12648898\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from sklearn import metrics\n",
    "def mape(y_true, y_pred):\n",
    "    return np.mean(np.abs((y_pred - y_true) / y_true))\n",
    "print('MAPE:',mape(inv_y, inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "1f9a9a20",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "R2-score: -0.24564592558117804\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import r2_score\n",
    "print('R2-score:',r2_score(inv_y, inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "27b1d1c5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x24bda511850>]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(inv_yhat,'r')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "334e9396",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "inv_yhat=pd.DataFrame(data=inv_yhat)\n",
    "inv_yhat.to_csv('inv_y.csv')\n",
    "inv_yhat.to_csv('fei02_min_pre.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "776d1290",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
